package com.cykj.pos.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cykj.common.core.domain.AjaxResult;

import com.cykj.common.core.domain.entity.SysUser;
import com.cykj.pos.domain.*;

import com.cykj.pos.domain.dto.BindPosDto;
import com.cykj.pos.domain.dto.BizMercahntFeeNameDTO;
import com.cykj.pos.domain.dto.BizMerchantDTO;
import com.cykj.pos.domain.dto.BizTransactionCountDTO;
import com.cykj.pos.domain.posone.PosOneMerchantInfo;
import com.cykj.pos.domain.vo.BizGdbArea;
import com.cykj.pos.profit.dto.MerchantDTO;

import java.text.ParseException;
import java.util.List;

/**
 * 商户基本信息Service接口
 *
 * @author xuxiaolong
 * @date 2022-08-09
 */
public interface IBizMerchantInfoService extends IService<BizMerchantInfo> {

    /**
     * 查询列表
     */
    List<BizMerchantInfo> queryList(BizMerchantInfo bizMerchantInfo);

    /**
     * 新增商户基本信息
     * @param bizMerchantInfo
     */
    JSONObject addMerchantsInfo(BizMerchantInfo bizMerchantInfo);

    /**
     * 查询审核成功的报件
     * @return
     */
    List<BizMerchantInfo> selectMerchantInfoByAuditStatus();


    /**
     * 更新商户审核状态
     * @param bizMerchantInfo
     */
    int updateByMerchantCode(BizMerchantInfo bizMerchantInfo);

    void updateFeeIdByMerchantNo(String merchantCode, Long feeId);

    /**
     * 绑定sn
     * @param bindPosDto
     * @return
     */
    AjaxResult bindingPosCode(BindPosDto bindPosDto);

    /**
     * 上传签名图片
     * @param bindPosDto
     * @return
     */
    AjaxResult wishCheckPartnerPhotoUpload(BindPosDto bindPosDto);

    /**
     * 上传视频
     * @param bindPosDto
     * @return
     */
    AjaxResult wishCheckPartnerVideoUpload(BindPosDto bindPosDto);

    /**
     * 获取我的商户直连Posp
     * @param merchantDTO
     * @return
     */
    List<PosOneMerchantInfo> getMyMerch(MerchantDTO merchantDTO);

    /**
     * 机具解绑
     * @param bindPosDto
     * @return
     */
    AjaxResult unbindMerchant(BindPosDto bindPosDto);
    /**
     * 机具转移
     * @param bizMerchantInfo
     * @return
     */
     int  transferPos(BizMerchantInfo bizMerchantInfo);

    /**
     * 回显商户信息
     * @param bizMerchantInfo
     * @return
     */
    BizMerchantInfo getMerchantInfo(BizMerchantInfo bizMerchantInfo);

    /**
     * 修改商户基本信息
     * @param bizMerchantInfo
     * @return
     */
    JSONObject updateMerchantsInfo(BizMerchantInfo bizMerchantInfo);

    /**
     * 全件修改基本信息
     *
     * @param bizMerchantInfo
     * @return
     */
    JSONObject updateAllMerchantsInfo(BizMerchantInfo bizMerchantInfo);
    /**
     * 查询费率id模板
     * @return
     */
    List<BizMercahntFeeNameDTO> echoFeeId();

    /**
     * 回显商户信息
     * @param bizMerchantInfo
     * @return
     */
    BizMerchantDTO echoMerchantInfo(BizMerchantInfo bizMerchantInfo);

    /**
     * 修改进件信息
     * @param bizMerchantInfo
     */
    void updateMerchantsInfoByMerchantCode(BizMerchantInfo bizMerchantInfo);

    /**
     * 查询POSP商户数量
     * @param userId
     * @return
     */
    int queryMyMerchNum(Long userId);

    String getAgentRate(String posCode);

    String getDeptIdByPosCode(String posCode);

    String getMerchantInfoStatus(String posCode);

    AjaxResult plUpdateFee();

    AjaxResult updateMerchantFee(BizMerchantInfo bizMerchantInfo);

    AjaxResult updateInfoFeePlusTenThousandsOne();

    JSONObject updateSettleAccount(BizMerchantInfo bizMerchantInfo);

    /**
     * 接收更新商户修改结算卡状态
     * @param bizMerchantInfo
     * @return
     */
    int updateSettleAccountStatusByMerchantCode(BizMerchantInfo bizMerchantInfo);

    /**
     * 查询是否有报件记录
     * @param posCode
     * @return
     */
    List<BizMerchantInfo>  getMerchantInfoRecord(String posCode);

    BizMerchantInfo getMerchantInfoBySn(String posCode);

    BizMerchantInfo getMerchantInfoByMerchantId(String merchantId);

    List<BizTransactionCountDTO> selectBizMerchantInfoByMerchantNo(BizMerchantEntry bizMerchantEntry);

    BizTransactionCountDTO selectBizMerchantEntryMerchNameAndTime(String merchantNo);

    AjaxResult addMerchantsInfoForGDB(BizMerchantEpspBinding bizMerchantEpspBinding) throws Exception;

    AjaxResult smsCodeConfirm(BizMerchantEpspBinding bizMerchantEpspBinding) throws Exception;

    AjaxResult GDBProvince();

    AjaxResult GDBCity(BizGdbArea bizGdbArea);

    AjaxResult GDBArea(BizGdbArea bizGdbArea);

    List<?> backAccountList(BizMerchantEpspBinding bizMerchantEpspBinding);

    /**
     * 新增商户基本信息
     * @param bizMerchantInfo
     */
    JSONObject addMerchantsKDBInfo(BizMerchantInfo bizMerchantInfo);
    JSONObject kdbCallback(BizMerchantInfo bizMerchantInfo);
    JSONObject kdbBindCallback(BizMerchantInfo bizMerchantInfo);

    /**
     * 新增商户基本信息(线上)
     * @param bizMerchantInfo
     */
    AjaxResult addMerchantsOnline(BizMerchantInfo bizMerchantInfo);
    /**
     * 查询费率id模板
     * @return
     */
    List<BizMercahntFeeNameDTO> echoFeeIdOnline();
    JSONObject onlineBinding(BizMerchantInfo bizMerchantInfo);
    JSONObject updateSettleAccountOnline(BizMerchantInfo bizMerchantInfo);
    AjaxResult addMerchantsQbInfo(BizMerchantInfo bizMerchantInfo);
    String hybAddInfo(JSONObject paramsObj);

    void deleteBySN(String posSn);
    AjaxResult queryKDBUpper(BizMerchantInfo bizMerchantInfo);

    List<BizMerchantInfo> getCupsNameList(String idCard);

    List<BizMerchantInfo> getMerchantInfoList(String idCard);

    AjaxResult changeCupsName(String json);

    AjaxResult excuteSubmitNewMerchant(String json);

    AjaxResult excuteSubmitNewXwMerchant(String json);

    AjaxResult noSnMerchantInfo(String json);

    AjaxResult changeKdbMerchantId(String json);


    AjaxResult bffr() throws ParseException;

    AjaxResult updateRate();

    AjaxResult receiveLHExamine(JSONObject json);


    AjaxResult tttt();

    AjaxResult updateFee();

    JSONObject appBackMerchantInfoList(BizMerchantInfo bizMerchantInfo);

    AjaxResult appBackMerchantInfoDetail(BizMerchantInfo bizMerchantInfo) throws ParseException;

    AjaxResult appBackPartnerList(BizMerchant bizMerchant);

    BizChannel getChannelDataByChannel(String channel);

    SysUser getSysUserByMerchId(Long merchId);

    /**
     * 商户日维度
     */
    void dailyDimension();

    /**
     * 商户月维度
     */
    void monthDimension();

    List<BizMerchantInfo> selectAllMerchantInfoList();

    BizMerchantInfo getMerchantInfoBySnAndSuccess(String posCode);

    AjaxResult echoFeeIdBySn(BizPosMachine bizPosMachine);

    JSONObject jlMerchantInfoNotice(BizJLMerchantInfo bizJLMerchantInfo);

    AjaxResult addChannelAbout(BizChannel bizChannel);

    AjaxResult slientMerchantInfo(BizMerchantInfo bizMerchantInfo);

    AjaxResult unActiveMerchantInfo(BizMerchantInfo bizMerchantInfo);

    AjaxResult failureActiveMerchantInfo(BizMerchantInfo bizMerchantInfo);

    void silenceMerchantInfo() throws ParseException;

    void selectUnActiveMerchantInfo() throws ParseException;

    void selectFailureActiveMerchantInfo() throws ParseException;

    void updateTransAmount(BizMerchantInfo info);

    void updateTransAmount1(BizMerchantInfo info);

    void executeCreateFlowTask() throws ParseException;

    List<AllocationRelation> executeQueryTrans(BizMerchantInfo bizMerchantInfo);
}
